/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-01-28
 * Time: 22:30
 */
public class Solution {
//     思路:
//     双指针(滑动窗口)
//     控制右边界一直往后遍历
//     出现重复的字符就右移左边界, 直到没有重复的字符
//     左边界滑动完之后, 更新一下最大长度
//     这里注意, 因为 字符串中包含, 字母, 数字, 空格
//     所以数组开的 大一些, 并且直接用字符作为下标遍历即可
    public int lengthOfLongestSubstring(String s) {
        int max=0;
        int length=s.length();
        // 因为因为 字符串中包含 字母, 数字, 空格
        // 所以数组开的 大一些
        int[] arr=new int[128];
        int left=0;
        // 移动右边界
        for(int right=0;right<length;right++){
            char ch=s.charAt(right);
            arr[ch]++;
            // 右移左边界, 直到 没有重复的字母
            while(arr[ch]>1){
                arr[s.charAt(left)]--;
                left++;
            }
            // 更新最大长度
            max=Math.max(max, right-left+1);
        }
        return max;
    }
}
